package map10;

import map09.Person;
import map09.Student;

import java.util.ArrayList;
import java.util.Collections;

/**
 * Collection接口:是单列集合的顶级父接口
 * Collections类:专门操作集合的工具类,这个类中大量方法都跟我们的集合相关
 *
 * static <T> boolean addAll(Collection<? super T> c, T... elements)
 *                         将所有指定元素添加到指定 collection 中。
 * static void reverse(List<?> list)
 *           反转指定列表中元素的顺序。
 *
 * static void shuffle(List<?> list)
 *           可以随机集合中元素
 */
public class Demo01 {
    public static void main(String[] args) {
        //method01();
        //method02();
        //method03();
        ArrayList<String> al = new ArrayList<>();
        Collections.addAll(al, "张三", "李四", "王五", "赵六");
        System.out.println(al);//[张三, 李四, 王五, 赵六]

        Collections.shuffle(al);
        System.out.println(al);//[李四, 张三, 赵六, 王五]
                              //[张三, 王五, 李四, 赵六]
                              //[王五, 赵六, 张三, 李四]
    }

    private static void method03() {
        ArrayList<String> al = new ArrayList<>();
        Collections.addAll(al, "张三", "李四", "王五", "赵六");
        System.out.println(al);//[张三, 李四, 王五, 赵六]

        Collections.reverse(al);
        System.out.println(al);//[赵六, 王五, 李四, 张三]
    }

    private static void method02() {
        ArrayList<Person> people = new ArrayList<Person>();
        ArrayList<Student> students = new ArrayList<Student>();
        Collections.addAll(students, new Student("流川枫"));//当给第二个参数传入new Student()时候,此时T的类型被确定为Student类型
        //第一参数 ? super T 被确定 ? super Student
        //限定集合中泛型为Student类型或者为Student父类型
        Collections.addAll(people, new Student("流川枫"));//集合中每个元素类型为Person类型指向 Student对象
        //多态

        //Collections.addAll(students, new Person("老王"));//当给第二个参数传入new Person()时候,此时T的类型被确定为Person类型
        //第一参数 ? super T 被确定 ? super Person
        //限定集合中泛型为Person类型或者为Person父类型
    }

    private static void method01() {
        ArrayList<String> al = new ArrayList<String>();
        Collections.addAll(al, "abc", "def", "ghk");
        System.out.println(al);
    }
}
